1.软件说明
1.1Mind+介绍
Mind+是一款基于Scratch3.0开发的青少年编程软件,支持Arduino、行空板K10、行空板M10等各种开源硬件的图形化及代码编程,只需要拖动图形化程序块即可完成编程,还可以使用Python/C/C++等高级编程语言,让大家轻松体验创造的乐趣。
Mind+官网下载地址:https://mindplus.cc
1.2行空板M10介绍
行空板(UNIHIKER)M10是一款高度集成的国产教学开源硬件(拥有自主知识产权),专为K12师生设计,适配信息科技、物理、生物等学科的新课标跨学科教学要求。集成单板计算机(4核CPU/512MB内存/16GB存储)、Linux系统、完整Python环境、并预装了常用Python库,更自带 2.8 英寸彩色触摸屏及丰富传感器, 只需两步就能开始Python教学平台。
行空板M10商城购买链接:https://www.dfrobot.com.cn/goods-3404.html
2.硬件连接
准备材料
- 硬件
- 行空板M10 x 1
- HUSKYLENS 2 x 1
- USB数据线 x2
- 4pin连接线(或杜邦线)x1
准备二根USB数据线和一根4Pin白色硅胶线。使用USB数据线连接电脑与行空板M10,使用4Pin白胶线连接行空板M10与HuskyLens 2,再使用额外的USB数据线连接HUSKYLENS 2的Type-C接口与电源,为HUSKYLENS 2进行额外供电。接线图可参考下图。
3.加载Huskylens 2库
3.1Mind+库加载方式
打开编程软件Mind+,点击右上角切换到Python模式
点击左下角扩展,在官方库中选择行空板M10并点击该图加载此库。
加载成功后如下图。
行空板M10加载成功后,继续在用户库中,添加HuskyLens 2库。
点击上图HuskyLens 2库,加载此库,加载成功后如图。最后点击左上角“返回”,返回到编程界面。
点击左上角代码,切换至Python 代码模式
建议在开始制作项目前,确认并将HUSKYLENS 2固件更新为最新版本,截止2025年11.7,当前HUSKYLENS 2最新固件为1.1.6,找到系统设置 - 设备信息,可以看到当前的系统版本。更新固件请见:点击跳转
4人脸识别代码
4.1识别人脸输出相关数据
在人脸识别功能下,当人脸出现在HuskyLens 2屏幕中时,可以被检测和框出,从而获取检测到的人脸总数、指定人脸的相关数据。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="人脸总数:",x=0,y=0,font_size=20, color="#0000FF")
line2=u_gui.draw_text(text="靠中心的人脸:",x=0,y=40,font_size=20, color="#0000FF")
line3=u_gui.draw_text(text="第一个人脸ID:",x=0,y=80,font_size=20, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
line1.config(text=(str("人脸总数:") + str((huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)))))
line2.config(text=(str("靠中心的人脸:") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))
line3.config(text=(str("第一个人脸ID:") + str(huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_FACE_RECOGNITION, 1-1) else -1)))
在Mind+中点击运行程序,等程序运行成功。
将HuskyLens 2的摄像头对准画面中的人脸分别学习,如何学习人脸详细操作请看:人脸识别功能-学习人脸
学习完成后,对准该人脸,可在M10屏幕上观察输出结果。
运行结果:如下,可以获取画面中检测到的人脸总数,不论该人脸是否已学习;可以指定获取靠近摄像头画面中心的人脸ID、第一个检测到的人脸ID(未学习过的人脸ID为0)。
4.2获取画面中指定人脸的详细数据
可以获取指定人脸的五官、位置数据,可以读取的人脸数据有:人脸ID、人脸名称、宽度、高度以及人脸中心点的X坐标位置和Y坐标位置、左/右眼X坐标、左/右眼Y坐标、左/右嘴角X坐标、左/右嘴角Y坐标、鼻子X/Y坐标位置。
如以下示例程序可以获取靠近摄像头中心画面的人脸的五官数据,未学习的人脸亦可获取。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="靠中心的人脸ID:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="其左眼坐标:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="其右眼坐标:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="左嘴角坐标:",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="右嘴角坐标:",x=0,y=160,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="其鼻子坐标:",x=0,y=200,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
line1.config(text=(str("靠中心的人脸ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))
line2.config(text=(str("其左眼坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).leye_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).leye_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line3.config(text=(str("其右眼坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).reye_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).reye_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line4.config(text=(str("左嘴角坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).lmouth_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).lmouth_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line5.config(text=(str("右嘴角坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).rmouth_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).rmouth_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
line6.config(text=(str("其鼻子坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).nose_x if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION).nose_y if huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION) else -1))))))))
**运行结果:**如下图,运行程序,M10屏幕上显示人脸ID号及该人脸的五官坐标数据。由于该人脸未学习,因此人脸ID为0。
除上述数据以外,还可以获取更多人脸数据,如画面中某个指定人脸的总数、该人脸的名称、第一个该人脸的相关数据。(未学习的人脸亦可获取以上数据)
以某个已学习的人脸为例,示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION)
line1=u_gui.draw_text(text="ID1的人脸总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="ID1人脸名称:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="第一个ID1人脸",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="的坐标:",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_FACE_RECOGNITION)
if (huskylens.available(ALGORITHM_FACE_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) is not None)):
line1.config(text=(str("ID1的人脸总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_FACE_RECOGNITION, 1)))))
line2.config(text=(str("ID1人脸名称:") + str((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) else -1))))
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_FACE_RECOGNITION, 1, 1-1) else -1))))))))
**运行结果:**如下图,运行程序,M10屏幕上显示画面中ID1人脸总数、该人脸的名称,第一个检测到的ID1人脸中心XY坐标。(人脸名称默认为“人脸”,设置名字操作,详见人脸识别功能说明-设置名字。)
5.物体识别代码
5.1识别物体输出相关数据
可识别HuskyLens 2视野内的物体(须是可识别的80种固定类别物体,详见物体识别功能介绍),获取物体相关数据,可以读取的数据有:画面中可识别物体的总数、靠近HuskyLens 2摄像头画面中心的物体ID号、检测到的第一个物体。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OBJECT_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_OBJECT_RECOGNITION)
if (huskylens.available(ALGORITHM_OBJECT_RECOGNITION)):
line1.config(text=(str("物体总数:") + str((huskylens.getCachedResultNum(ALGORITHM_OBJECT_RECOGNITION)))))
line2.config(text=(str("已学习物体总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_OBJECT_RECOGNITION)))))
line3.config(text=(str("靠中心的物体:") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_RECOGNITION).name if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_RECOGNITION) else -1))))
line4.config(text=(str("第一个物体的ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_OBJECT_RECOGNITION, 1 - 1).ID if huskylens.getCachedResultByIndex(ALGORITHM_OBJECT_RECOGNITION, 1 - 1) else -1))))
在Mind+中点击上传到设备,等待程序上传完成。二哈自动进入HuskyLens 2的物体识别功能。将HuskyLens 2的摄像头对准画面中的物体分别学习,如何学习物体详细操作请看:物体识别功能-学习物体,学习完成后,对准该物体,可在屏幕上观察输出结果。
**运行结果:**可按要求输出相应数据,如第一行输出检测到的物体总数,第二行输出的是已学习的物体总数。第三、四行输出的是指定的手势ID号,学习过的手势会按照学习顺序分配ID号,未学习过的手势,其ID号为0。
5.2获取画面中指定物体的相关数据
HuskyLens 2识别物体后,可获取画面中指定物体的相关数据。例如,判断某个指定的物体是否在画面中、指定物体的名称、可获取画面中指定同类物体的数量,当画面中出现多个同类物体时,可指定获取其中某个物体的相关参数,包括名称、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OBJECT_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_OBJECT_RECOGNITION)
if (huskylens.available(ALGORITHM_OBJECT_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2) is not None)):
line1.config(text=(str("检测到几个ID2:") + str((huskylens.getCachedResultNumByID(ALGORITHM_OBJECT_RECOGNITION, 2)))))
line2.config(text=(str("ID2物体的名称:") + str((huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2).name if huskylens.getCachedResultByID(ALGORITHM_OBJECT_RECOGNITION, 2) else -1))))
line3.config(text="第一个ID2物体")
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_OBJECT_RECOGNITION, 2, 1-1) else -1))))))))
**运行结果:**如图所示,可获取到画面中的物体总数、画面中ID2物体数量、名称,以及检测到的第一个ID2物体的坐标位置。
6.物体追踪代码
6.1追踪物体输出相关数据
当HUSKYLENS 2检测到可追踪的目标物体时,可获取相关追踪数据。可以获取的数据有:物体的ID、名称、xy坐标、宽度、高度。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OBJECT_TRACKING)
line1=u_gui.draw_text(text="物体ID:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="物体名称:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="物体坐标:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="物体宽高:",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_OBJECT_TRACKING)
if (huskylens.available(ALGORITHM_OBJECT_TRACKING)):
line1.config(text=(str("物体ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING).ID if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING) else -1))))
line2.config(text=(str("物体名称:") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING).name if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING) else -1))))
line3.config(text=(str("物体坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING).xCenter if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING).yCenter if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING) else -1))))))))
line4.config(text=(str("物体宽高:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING).width if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING).height if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_TRACKING) else -1))))))))
在Mind+中点击运行,等待程序上传完成后。
将HUSKYLENS 2摄像头对准要追踪的物体(追踪物体须先框选目标,详见物体追踪使用说明。
框选完成后,对准要追踪的目标物体,可观察输出结果。
**运行结果:**可输出追踪到的物体ID、名称、xy坐标、宽度、高度。物体名称默认为"物体" 。
7.颜色识别代码
7.1识别颜色输出相关数据
可识别HUSKYLENS 2视野内的色块,并输出色块相关数据,可以读取的数据有:检测到的色块总数、已学习的色块总数、靠近HUSKYLENS 2摄像头画面中心的色块ID号、第一个检测到的色块ID号等。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_COLOR_RECOGNITION)
line1=u_gui.draw_text(text="色块总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="已学习色块总数:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="靠近中心的色块ID:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="第一个色块ID:",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_COLOR_RECOGNITION)
if (huskylens.available(ALGORITHM_COLOR_RECOGNITION)):
line1.config(text=(str("色块总数:") + str((huskylens.getCachedResultNum(ALGORITHM_COLOR_RECOGNITION)))))
line2.config(text=(str("已学习色块总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_COLOR_RECOGNITION)))))
line3.config(text=(str("靠近中心的色块ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_COLOR_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_COLOR_RECOGNITION) else -1))))
line4.config(text=(str("第一个色块ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_COLOR_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_COLOR_RECOGNITION, 1-1) else -1))))
在Mind+中点击运行,等待程序上传完成。
将HUSKYLENS 2的十字光标对准色块进行学习,如何学习颜色详细操作请看:颜色识别功能-学习颜色。
学习完成后,将HUSKYLENS 2摄像头对准色块,观察输出结果。
**运行结果:**可输出检测到的色块总数,无论该色块是否已学习,只要方框框出色块,就会计数。可按要求输出相应数据,如第二行输出的是已学习的色块总数。第三、四行输出的是指定的色块ID号,其中靠近画面中心的色块被白框框出,即未学习的色块,因此输出“靠近中心的色块ID号”为0。
7.2获取指定颜色的相关数据
HUSKYLENS 2识别颜色后,可获取画面中指定颜色的相关数据。例如,判断某个指定的颜色是否在画面中、指定颜色的名称、可获取画面中相同的指定颜色的色块数量,当画面中出现多个相同颜色的色块时,可指定获取其中某个色块的相关参数,包括名称、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_COLOR_RECOGNITION)
line1=u_gui.draw_text(text="ID1色块总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="ID1色块名称:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="第一个ID1色块",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="的坐标:",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_COLOR_RECOGNITION)
if (huskylens.available(ALGORITHM_COLOR_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_COLOR_RECOGNITION, 1) is not None)):
line1.config(text=(str("ID1色块总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_COLOR_RECOGNITION, 1)))))
line2.config(text=(str("ID1色块名称:") + str((huskylens.getCachedResultByID(ALGORITHM_COLOR_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_COLOR_RECOGNITION, 1) else -1))))
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_COLOR_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_COLOR_RECOGNITION, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_COLOR_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_COLOR_RECOGNITION, 1, 1-1) else -1))))))))
**运行结果:**如图所示,可获取到画面中ID1的色块总数、ID1的色块名称,以及第一个检测到的ID1色块的坐标位置。(颜色名称可以自定义,默认为“颜色”,设置名字详见 颜色识别功能-设置名字
8.物体分类代码
8.1识别已学习物体输出ID与名称
在物体分类功能下,HUSKYLENS 2可以分类1000种固定类别的物体,同时可以使用以下示例程序获取识别到的的已学习物体对应ID和名称。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OBJECT_CLASSIFICATION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=16, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=16, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_OBJECT_CLASSIFICATION)
if (huskylens.available(ALGORITHM_OBJECT_CLASSIFICATION)):
line1.config(text=(str("物体ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_CLASSIFICATION).classID if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_CLASSIFICATION) else -1))))
line2.config(text=(str("物体名称:") + str((huskylens.getCachedCenterResult(ALGORITHM_OBJECT_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_OBJECT_CLASSIFICATION) else -1))))
在Mind+中点击运行,等待程序上传完成后。
HUSKYLENS 2学习物体完成后,将HUSKYLENS 2摄像头对准已学习的物体,观察输出结果。如何学习物体详细操作请看: 物体分类功能说明-学习物体。
**运行结果:**如下,当已学习过的某一物体出现在画面中时,会显示该物体名称、ID、置信度(置信度暂时无法通过程获取结果)。
9.自学习分类代码
9.1识别已学习物体输出ID与名称
在自学习分类功能下,当已学习某一物体后,HUSKYLENS 2 再次见到该物体就能识别出来,可以使用以下示例程序获取识别的已学习物体对应ID和名称。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
line1=u_gui.draw_text(text="物体ID:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="物体名称:",x=0,y=40,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
line1.config(text=(str("物体ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).ID if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1))))
line2.config(text=(str("物体名称:") + str((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1))))
在Mind+中点击运行,等待程序上传完成后。
HUSKYLENS 2学习物体完成后,将HUSKYLENS 2摄像头对准已学习的物体,观察输出结果。如何学习物体详细操作请看:自学习分类功能-学习物体 。
**运行结果:**如下,当已学习过的某一物体出现在画面中时会被框出同时显示该物体名称、ID与置信度。如果未设置该物体的名称,则输出名称默认为:物体。
10.手势识别代码
10.1识别手势输出相关数据
可检测HuskyLens 2视野内的手势,获取手势相关数据,可以读取的数据有:画面中检测到的手势总数、靠近HuskyLens 2摄像头画面中心的手势ID号、检测到的第一个手势ID号。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_HAND_RECOGNITION)
line1=u_gui.draw_text(text="手势总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="已学习手势总数:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="靠中心的手势ID:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="第一个手势ID:",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_HAND_RECOGNITION)
if (huskylens.available(ALGORITHM_HAND_RECOGNITION)):
line1.config(text=(str("手势总数:") + str((huskylens.getCachedResultNum(ALGORITHM_HAND_RECOGNITION)))))
line2.config(text=(str("已学习手势总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_HAND_RECOGNITION)))))
line3.config(text=(str("靠中心的手势ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))
line4.config(text=(str("第一个手势ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_HAND_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_HAND_RECOGNITION, 1-1) else -1))))
在Mind+中点击运行,等待程序上传完成。进入HuskyLens 2的手势识别功能。将HuskyLens 2的摄像头对准画面中的手势进行学习,如何学习手势详细操作请看:手势识别功能-学习手势
学习完成后,对准该手势,可在屏幕上观察输出结果。
**运行结果:**可输出检测到的手势总数,无论该手势是否已学习,只要方框框出手势,就会计数。可按要求输出相应数据,如第二行输出的是已学习的手势总数。第三、四行输出的是指定的手势ID号,学习过的手势会按照学习顺序分配ID号,未学习过的手势,其ID号为0。
10.2获取画面中指定手势的相关数据
可以获取指定手势的ID号、名称、手指、手腕等关键点的数据,详细数据有:手势ID、手势名称、手势中心点的X坐标位置和Y坐标位置、宽度、高度、手腕X/Y坐标,每根手指的根部、关节、指尖的X/Y坐标。详情请看手势识别积木说明。
如以下示例程序可以获取靠近摄像头画面中心的手势的手腕、五根手指指尖的X/Y坐标数据,未学习的手势亦可获取。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_HAND_RECOGNITION)
line1=u_gui.draw_text(text="靠中心的手势ID:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="手腕坐标:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="拇指指尖:",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="食指指尖:",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="中指指尖:",x=0,y=160,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="无名指指尖:",x=0,y=200,font_size=18, color="#0000FF")
line7=u_gui.draw_text(text="小指指尖:",x=0,y=240,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_HAND_RECOGNITION)
if (huskylens.available(ALGORITHM_HAND_RECOGNITION)):
line1.config(text=(str("靠中心的手势ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))
line2.config(text=(str("手腕坐标:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).wrist_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).wrist_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
line3.config(text=(str("拇指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).thumb_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).thumb_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
line4.config(text=(str("食指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).index_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).index_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
line5.config(text=(str("中指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).middle_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).middle_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
line6.config(text=(str("无名指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ring_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).ring_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
line7.config(text=(str("小指指尖:") + str((str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).pinky_finger_tip_x if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1)) + str((str(",") + str((huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION).pinky_finger_tip_y if huskylens.getCachedCenterResult(ALGORITHM_HAND_RECOGNITION) else -1))))))))
**运行结果:**如下图,运行程序,屏幕上显示手势ID号及该手势的关键点数据。由于该手势未学习,因此手势ID为0。
除以上数据,还可以获取更多指定手势的数据。例如,判断某个指定手势是否在画面中、指定手势的名称、可获取画面中相同手势的数量,当画面中出现多个相同手势时,可指定获取其中某个手势的相关参数,包括名称、手势中心X/Y坐标、宽度、高度、指尖坐标、手腕坐标数据等等。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_HAND_RECOGNITION)
line1=u_gui.draw_text(text="ID1手势总数:",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="ID1手势名称:",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="第一个ID1手势",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="的坐标:",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_HAND_RECOGNITION)
if (huskylens.available(ALGORITHM_HAND_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_HAND_RECOGNITION, 1) is not None)):
line1.config(text=(str("ID1手势总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_HAND_RECOGNITION, 1)))))
line2.config(text=(str("ID1手势名称:") + str((huskylens.getCachedResultByID(ALGORITHM_HAND_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_HAND_RECOGNITION, 1) else -1))))
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_HAND_RECOGNITION, 1, 1-1) else -1))))))))
**运行结果:**如图所示,可获取到画面中ID1手势数量、名称,以及检测到的第一个ID1手势的坐标位置。
11.实例分割代码
11.1实例分割并输出相关数据
实例分割功能下,HUSKYLENS可以识别中图像中物体的类别并标记出每个物体的轮廓。可以使用程序打印出HUSKYLENS识别出的实例总数、靠近中心的实例和指定ID实例的名称、ID、中心点X、Y坐标以及物体的宽度和高度。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_SEGMENT)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_SEGMENT)
if (huskylens.available(ALGORITHM_SEGMENT)):
line1.config(text=(str("实例有:") + str((str((huskylens.getCachedResultNum(ALGORITHM_SEGMENT))) + str("个")))))
line2.config(text=(str("靠近中心实例ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_SEGMENT).ID if huskylens.getCachedCenterResult(ALGORITHM_SEGMENT) else -1))))
line3.config(text="识别第一个实例")
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1).xCenter if huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) else -1)) + str((str(",") + str((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1).yCenter if huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) else -1))))))))
在Mind+中点击运行,等待程序上传完成后,HuskyLens 2自动进入实例分割功能,将HuskyLens 2的摄像头对准画面中的实例进行学习,如何学习实例详细操作请看:实例分割功能-学习实例。
学习完成后,对准该已学习过的实例,可在屏幕上观察输出结果。
**运行结果:**当程序上传成功后,HUSKYLENS 2会自动切换到实例分割功能下,将HUSKYLENS 2对准待识别的物体(必须是80类之中),观察出现识别到的实例数量、指定实例的ID、中心点坐标等数据。
11.2获取指定实例的相关数据
在实例分割功能下,HUSKYLENS 2 学习后,可获取画面中指定实例的相关数据。例如,判断某个已学习的实例是否在画面中、指定手实例的名称、同类实例的数量,当画面中出现多个相同类别是实例时,可指定获取其中某个实例的相关参数,包括名称、X/Y坐标、宽度、高度。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_SEGMENT)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=110,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_SEGMENT)
if (huskylens.available(ALGORITHM_SEGMENT)):
if ((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) is not None)):
line1.config(text=(str("ID1实例总数为:") + str((str((huskylens.getCachedResultNumByID(ALGORITHM_SEGMENT, 1))) + str("个")))))
line2.config(text=(str("ID1实例名称为:") + str((huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1).name if huskylens.getCachedResultByID(ALGORITHM_SEGMENT, 1) else -1))))
line3.config(text="第1个ID1实例")
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_SEGMENT, 1, 1-1) else -1))))))))
**运行结果:**当同一类别的多个实例出现在画面中时可以识别同一类别的实例的数量,输出指定实例的ID、中心点坐标、ID等相关数据。
12.姿态识别代码
12.1识别人体姿态输出相关数据
通过以下示例程序,可识别HuskyLens 2视野内的人体姿态,获取姿态相关数据,可以读取的数据有:检测到的人体总数、已学习的姿态总数;靠近HuskyLens 2摄像头画面中心的人体姿态ID号、检测到的第一个姿态的ID号。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_POSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_POSE_RECOGNITION)
if (huskylens.available(ALGORITHM_POSE_RECOGNITION)):
line1.config(text=(str("人体总数:") + str((huskylens.getCachedResultNum(ALGORITHM_POSE_RECOGNITION)))))
line2.config(text=(str("已学习姿态总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_POSE_RECOGNITION)))))
line3.config(text=(str("靠中心的人体ID:") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))
line4.config(text=(str("第一个人体ID:") + str(huskylens.getCachedResultByIndex(ALGORITHM_POSE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_POSE_RECOGNITION, 1-1) else -1)))
在Mind+中点击运行程序,等待程序上传完成。
进入HuskyLens 2的姿态识别功能。将HuskyLens 2的摄像头对准画面中的人体姿态进行学习,如何学习姿态详细操作请看:姿态识别功能-学习姿态,学习完成后,对准该姿态,可在M10屏幕上观察输出结果。
**运行结果:**可输出检测到的人体总数、已学习的姿态总数;可输出指定人体姿态ID号,已学习的人体姿态会按学习顺序分配ID号,未学习的姿态,ID号为0。
12.2获取画面中指定姿态的相关数据
可以获取指定人体姿态的ID号、名称、五官、人体关节等关键点的数据,详细数据有:人体ID、人体姿态名称、人体中心点的X坐标位置和Y坐标位置、宽度、高度,左右眼耳鼻X/Y坐标,左右两边肩膀、手肘、手腕、臀部、膝盖、脚踝的X/Y坐标。详情请看姿态识别积木说明。
如以下示例程序可以获取靠近摄像头画面中心的人体的鼻子、左边肩膀、手肘、臀部、膝盖、脚踝的X/Y坐标数据,未学习的人体姿态亦可获取。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_POSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=160,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="",x=0,y=200,font_size=18, color="#0000FF")
line7=u_gui.draw_text(text="",x=0,y=240,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_POSE_RECOGNITION)
if (huskylens.available(ALGORITHM_POSE_RECOGNITION)):
line1.config(text=(str("靠近中心的人体ID:") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))
line2.config(text=(str("鼻子坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).nose_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).nose_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
line3.config(text=(str("左肩坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lshoulder_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lshoulder_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
line4.config(text=(str("左肘坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lelbow_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lelbow_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
line5.config(text=(str("左臀坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lhip_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lhip_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
line6.config(text=(str("左膝坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lknee_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lknee_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
line7.config(text=(str("左踝坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lankle_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lankle_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
**运行结果:**如下图,运行程序,K10屏幕上显示人体ID号及该人体的鼻子、部分人体关键点的坐标数据。由于该人体姿态未学习,因此人体ID为0。
除以上数据,还可以获取更多人体姿态数据。例如,判断某指定ID的姿态是否在画面中、指定姿态的名称、可获取画面中相同姿态的数量,当画面中出现多个相同姿态时,可指定获取其中某个姿态的相关参数,包括名称、X/Y坐标、宽度、高度及人体关键点坐标数据。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_POSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_POSE_RECOGNITION)
if (huskylens.available(ALGORITHM_POSE_RECOGNITION)):
line1.config(text=(str("ID1姿态总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_POSE_RECOGNITION, 1)))))
line2.config(text=(str("ID1姿态名称:") + str(huskylens.getCachedResultByID(ALGORITHM_POSE_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_POSE_RECOGNITION, 1) else -1)))
line3.config(text="第一个ID1姿态")
line4.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1) else -1)))))))
**运行结果:**如图所示,可获取到画面中ID1姿态数量、名称,以及检测到的第一个ID1姿态的坐标位置。
13.车牌识别代码
13.1识别车牌输出相关数据
在车牌识别功能下,当车牌出现在HUSKYLENS 2屏幕中时,可以被识别和框出,并获车牌的相关数据。可以读取车牌的数据有:指定车牌的ID、名称、车牌内容(车牌号)、宽度、高度以及车牌中心点的X坐标位置和Y坐标位置,画面中的车牌总数、画面中已学习的车牌总数。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_LICENSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_LICENSE_RECOGNITION)
if (huskylens.available(ALGORITHM_LICENSE_RECOGNITION)):
line1.config(text=(str("车牌总数:") + str((huskylens.getCachedResultNum(ALGORITHM_LICENSE_RECOGNITION)))))
line2.config(text=(str("已学习车牌总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_LICENSE_RECOGNITION)))))
line3.config(text=(str("靠近中心的车牌ID:") + str(huskylens.getCachedCenterResult(ALGORITHM_LICENSE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_LICENSE_RECOGNITION) else -1)))
line4.config(text=(str("第一个车牌ID:") + str(huskylens.getCachedResultByIndex(ALGORITHM_LICENSE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_LICENSE_RECOGNITION, 1-1) else -1)))
在Mind+中点击运行程序,等待程序上传完成后。
将HuskyLens 2的摄像头对准画面中的车牌进行学习,如何学习车牌详细操作请看[车牌识别功能说明]((https://wiki.dfrobot.com.cn/_SKU_SEN0638_Gravity_HUSKYLENS_2_AI_Camera_Vision_Sensor#4.8%E8%BD%A6%E7%89%8C%E8%AF%86%E5%88%AB)。
将HUSKYLENS 2的摄像头对准车牌,观察行空板M10屏幕上的数据。
**运行结果:**如下,识别到画面中有三个车牌,其中已学习的车牌有1个;靠近画面中心的车牌ID、第一个被检测到的车牌ID均为0。(到未学习的车牌,ID号为0,已学习的车牌,则输出其对应ID号。)
13.2输出指定ID车牌的数据
当画面中出现多个相同ID的车牌时,可以使用以下示例程序统计画面中的该ID车牌的相关数据。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_LICENSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=65,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=145,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_LICENSE_RECOGNITION)
if (huskylens.available(ALGORITHM_LICENSE_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_LICENSE_RECOGNITION, 1) is not None)):
line1.config(text=(str("ID1车牌总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_LICENSE_RECOGNITION, 1)))))
line2.config(text="ID1车牌")
line3.config(text=(str("的车牌号:") + str(huskylens.getCachedResultByID(ALGORITHM_LICENSE_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_LICENSE_RECOGNITION, 1) else -1)))
line4.config(text="第一个ID1车牌")
line5.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(ALGORITHM_LICENSE_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_LICENSE_RECOGNITION, 1, 1-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(ALGORITHM_LICENSE_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_LICENSE_RECOGNITION, 1, 1-1) else -1)))))))
**运行结果:**如下,当画面中出现多个指定ID的车牌时,可获取画面中该ID车牌的总数、该ID下指定车牌的车牌号、车牌坐标等数据。
14光学字符识别代码
14.1识别文字输出相关数据
在光学字符识别功能下,HUSKYLENS 2 可识别并框出视野内文字块出现的区域,并将识别到的文字显示在屏幕上,可使用以下示例程序,统计画面中可识别文字块的总数、获取画面中离十字光标最近的文字块相关数据,可以读取的数据有:文字块的ID 、名称、内容、中心点X坐标和Y坐标、文字块宽度和高度。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_OCR_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=165,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="",x=0,y=190,font_size=18, color="#0000FF")
line7=u_gui.draw_text(text="",x=0,y=230,font_size=18, color="#0000FF")
line8=u_gui.draw_text(text="",x=0,y=255,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_OCR_RECOGNITION)
if (huskylens.available(ALGORITHM_OCR_RECOGNITION)):
line1.config(text=(str("文字块数量:") + str((huskylens.getCachedResultNum(ALGORITHM_OCR_RECOGNITION)))))
line2.config(text=(str("靠近中心的文字ID:") + str(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION) else -1)))
line3.config(text="靠近中心的文字内容:")
line4.config(text=huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION).content if huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION) else -1)
line5.config(text="靠近中心的文字块")
line6.config(text=(str("的坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION).xCenter if huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION).yCenter if huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION) else -1)))))))
line7.config(text="靠近中心的文字块")
line8.config(text=(str("的宽高:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION).width if huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION).height if huskylens.getCachedCenterResult(ALGORITHM_OCR_RECOGNITION) else -1)))))))
在Mind+中点击运行程序,等待程序上传完成。
将HUSKYLENS 2的摄像头对准任意光学字符,观察K10屏幕显示的结果。
**运行结果:**如下,对于未学习过的文字块默认输出ID为0。
可以对准一张学习过的文字块,如何学习光学字符详细操作请看:光学字符识别-学习文字
**运行结果:**如下,对于已学习过的文字块输出ID与HUSKYLENS 2屏幕显示的ID保持一致。
注:在光学字符识别功能下,HUSKYLENS 2能检测出画面中所有文字块出现的区域并用方框框出,但是只识别十字光标所在的一个文字块区域的内容并将文字内容显示在方框左上角。
15.巡线代码
15.1识别路口输出数据
在巡线功能下,HUSKYLENS 2可以标记出画面中路线的轨迹,获取当前路线的长度、角度和X、Y分量。当路线出现分支时,可以获取路口的分支数量和逆时针方向起每条分支的相应数据。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_LINE_TRACKING)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=145,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="",x=0,y=185,font_size=18, color="#0000FF")
line7=u_gui.draw_text(text="",x=0,y=210,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_LINE_TRACKING)
if (huskylens.available(ALGORITHM_LINE_TRACKING)):
line1.config(text=(str("路线的角度为:") + str((huskylens.getCurrentBranch(ALGORITHM_LINE_TRACKING,'angle')))))
line2.config(text=(str("路线的长度为:") + str((huskylens.getCurrentBranch(ALGORITHM_LINE_TRACKING,'length')))))
line3.config(text="路线的X和Y分量为:")
line4.config(text=(str((huskylens.getCurrentBranch(ALGORITHM_LINE_TRACKING,'xTarget'))) + str((str(",") + str((huskylens.getCurrentBranch(ALGORITHM_LINE_TRACKING,'yTarget')))))))
line5.config(text=(str("路口分支数量为:") + str((huskylens.getUpcomingBranchCount(ALGORITHM_LINE_TRACKING)))))
line6.config(text="逆时针第1条分支路线")
line7.config(text=(str("的X分量:") + str((huskylens.getBranch(ALGORITHM_LINE_TRACKING, 1-1,'xTarget')))))
**运行结果:**如图所示,将HUSKYLENS的镜头对准带有路线的地图,观察行空板M10屏幕输出的当前路线长度、角度等数据。当路线由多个分支时,可以输出分支数量、逆时针方向指定路线的X分量数据。
16.表情识别代码
16.1识别表情输出相关数据
在表情识别功能下,HUSKYLENS 2 能识别7种特定的表情:愤怒(ID为1)、厌恶(ID为2)、恐惧(ID为3)、开心(ID为4)、中性(ID为5)、悲伤(ID为6)和惊讶(ID为7)。以上表情已经在HUSKYLENS 2 出厂时学习完毕,无需用户再次手动学习,表情识别的详细功能使用说明请见表情识别 。
通过以下示例程序能统计当前HUSKYLENS 2 摄像头画面出识别出的所有表情的数量、输出指定表情的ID。
示例程序如下
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_EMOTION_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_EMOTION_RECOGNITION)
if (huskylens.available(ALGORITHM_EMOTION_RECOGNITION)):
line1.config(text=(str("表情总数:") + str((huskylens.getCachedResultNum(ALGORITHM_EMOTION_RECOGNITION)))))
line2.config(text=(str("靠近中心的表情ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_EMOTION_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_EMOTION_RECOGNITION) else -1))))
line3.config(text=(str("第一个表情的ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_EMOTION_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_EMOTION_RECOGNITION, 1-1) else -1))))
在Mind+中点击运行程序
当任意以上七种表情出现在摄像头画面中,观察HUSKYLENS 2 的屏幕会将表情框出,显示表情ID、名称和置信度。同时,行空板K10屏幕上显示根据程序输出的结果数据。
运行结果如下:根据程序要求,输出了指定的表情ID、画面中表情总数。
16.2获取画面中指定表情的相关数据
当画面中出现多个相同ID的表情时,可以使用以下示例程序统计画面中的该ID表情的相关数据。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_EMOTION_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_EMOTION_RECOGNITION)
if (huskylens.available(ALGORITHM_EMOTION_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_EMOTION_RECOGNITION, 4) is not None)):
line1.config(text=(str("ID4表情总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_EMOTION_RECOGNITION, 4)))))
line2.config(text=(str("ID4表情名称:") + str((huskylens.getCachedResultByID(ALGORITHM_EMOTION_RECOGNITION, 4).name if huskylens.getCachedResultByID(ALGORITHM_EMOTION_RECOGNITION, 4) else -1))))
line3.config(text="第一个ID4表情")
line4.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_EMOTION_RECOGNITION, 4, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_EMOTION_RECOGNITION, 4, 1-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_EMOTION_RECOGNITION, 4, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_EMOTION_RECOGNITION, 4, 1-1) else -1))))))))
**运行结果:**如下,当画面中出现多个指定ID的表情时,可获取画面中该ID表情的总数、名称、该ID下某个指定表情的坐标等数据。
17.标签识别代码
17.1识别标签输出相关数据
HUSKYLENS 2能识别出现在画面中的AprilTag标签,可以通过编程获取画面中检测到的标签相关数据。可以读取的标签数据有:指定标签的数据,包括标签ID、标签内容、标签宽度、标签高度以及标签中心点的X坐标位置和Y坐标位置等、检测到的标签总数。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_TAG_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_TAG_RECOGNITION)
if (huskylens.available(ALGORITHM_TAG_RECOGNITION)):
line1.config(text=(str("标签总数:") + str((huskylens.getCachedResultNum(ALGORITHM_TAG_RECOGNITION)))))
line2.config(text=(str("已学习的标签总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_TAG_RECOGNITION)))))
line3.config(text=(str("靠近中心的标签ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_TAG_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_TAG_RECOGNITION) else -1))))
line4.config(text=(str("第一个标签ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_TAG_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_TAG_RECOGNITION, 1-1) else -1))))
在Mind+中点击运行程序,等待程序上传完成后。
将HuskyLens 2的摄像头对准画面中的标签可进行学习,如何学习标签详细操作请看:标签识别功能-学习标签。
将HUSKYLENS 2的摄像头对准标签码,观察K10屏幕显示的结果。
**运行结果:**如图所示,可输出检测到的标签码数量(无论是否该标签码已学习)、可输出指定的标签ID,未学习的标签码则为0。
17.2获取画面中指定标签的相关数据
HuskyLens 2识别标签后,可获取画面中指定标签的相关数据。例如,判断某个指定ID的标签是否在画面中、可获取画面中相同ID的标签数量,当画面中出现多个相同ID的标签时,可指定获取其中某个标签的相关参数,包括名称、内容、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_TAG_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=65,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=130,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_TAG_RECOGNITION)
if (huskylens.available(ALGORITHM_TAG_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 0) is not None)):
line1.config(text=(str("ID0标签总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_TAG_RECOGNITION, 0)))))
line2.config(text="第一个ID0标签")
line3.config(text=(str("的内容:") + str((huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 1-1).content if huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 1-1) else -1))))
line4.config(text="第2个ID0标签")
line5.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 2-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 2-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 2-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_TAG_RECOGNITION, 0, 2-1) else -1))))))))
**运行结果:**如图所示,画面中有两个未学习的标签码(ID为0),第一个ID0标签是左边的,该标签的内容是48,第二个ID0标签是右边的,该标签的坐标是(505,263)。
18.二维码识别代码
18.1识别二维码输出相关数据
HUSKYLENS 2能识别出现在画面中的二维码,可以通过编程获取画面中检测到的二维码相关数据。可以读取的二维码数据有:检测到的二维码总数、已学习的二维码总数,指定二维码的数据,包括二维码ID、内容、宽度、高度以及二维码中心点的X坐标位置和Y坐标位置。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_QRCODE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_QRCODE_RECOGNITION)
if (huskylens.available(ALGORITHM_QRCODE_RECOGNITION)):
line1.config(text=(str("二维码总数:") + str((huskylens.getCachedResultNum(ALGORITHM_QRCODE_RECOGNITION)))))
line2.config(text=(str("已学习的二维码数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_QRCODE_RECOGNITION)))))
line3.config(text=(str("靠中心的二维码ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION) else -1))))
line4.config(text=(str("第一个二维码ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_QRCODE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_QRCODE_RECOGNITION, 1-1) else -1))))
在Mind+中点击上传到设备,等待程序上传完成后。
将HuskyLens 2的摄像头对准画面中的二维码可进行学习,如何学习二维码详细操作请看:二维码识别功能-学习二维码。
将HUSKYLENS 2的摄像头对准二维码,观察行空板M10屏幕显示的结果。
**运行结果:**如图所示,可输出检测到的二维码数量(无论是否该二维码已学习)、已学习的二维码数量,可输出指定的二维码ID,未学习的二维码则为0。
18.2获取画面中指定二维码的相关数据
HuskyLens 2识别二维码后,可获取画面中指定二维码的相关数据。例如,判断某个指定ID的二维码是否在画面中、可获取画面中相同ID的二维码数量,当画面中出现多个相同ID的二维码时,可指定获取其中某个二维码的相关参数,包括名称、内容、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_QRCODE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=65,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=130,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_QRCODE_RECOGNITION)
if (huskylens.available(ALGORITHM_QRCODE_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_QRCODE_RECOGNITION, 0) is not None)):
line1.config(text=(str("ID0二维码总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_QRCODE_RECOGNITION, 0)))))
line2.config(text="第1个ID0二维码")
line3.config(text=(str("的内容:") + str((huskylens.getCachedIndexResultByID(ALGORITHM_QRCODE_RECOGNITION, 0, 1-1).content if huskylens.getCachedIndexResultByID(ALGORITHM_QRCODE_RECOGNITION, 0, 1-1) else -1))))
line4.config(text="第2个ID0二维码")
line5.config(text=(str("的坐标:") + str((str((huskylens.getCachedIndexResultByID(ALGORITHM_QRCODE_RECOGNITION, 0, 2-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_QRCODE_RECOGNITION, 0, 2-1) else -1)) + str((str(",") + str((huskylens.getCachedIndexResultByID(ALGORITHM_QRCODE_RECOGNITION, 0, 2-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_QRCODE_RECOGNITION, 0, 2-1) else -1))))))))
**运行结果:**如图所示,画面中有两个未学习的二维码(ID为0),第一个ID0二维码是右边的,该标签的内容是“南瓜面包”,第二个ID0二维码是左边的,该二维码的坐标是(122,187)。
19.条形码识别积木
19.1识别条形码输出相关数据
HUSKYLENS 2能识别出现在画面中的条形码,可以通过编程获取画面中检测到的条形码相关数据。可以读取的条形码数据有:检测到的条形码总数,指定条形码的数据,包括条形码ID、内容、宽度、高度以及条形码中心点的X坐标位置和Y坐标位置。
示例程序如下。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_BARCODE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_BARCODE_RECOGNITION)
if (huskylens.available(ALGORITHM_BARCODE_RECOGNITION)):
line1.config(text=(str("条形码总数:") + str((huskylens.getCachedResultNum(ALGORITHM_BARCODE_RECOGNITION)))))
line2.config(text=(str("已学习的条形码数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_BARCODE_RECOGNITION)))))
line3.config(text=(str("靠中心的条形码ID:") + str((huskylens.getCachedCenterResult(ALGORITHM_BARCODE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_BARCODE_RECOGNITION) else -1))))
line4.config(text=(str("第一个条形码ID:") + str((huskylens.getCachedResultByIndex(ALGORITHM_BARCODE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_BARCODE_RECOGNITION, 1-1) else -1))))
在Mind+中点击运行程序,等待程序上传完成后。
将HuskyLens 2的摄像头对准画面中的条形码可进行学习,如何学习条形码详细操作请看:条形码识别功能-学习条形码。
将HUSKYLENS 2的摄像头对准条形码,观察K10屏幕显示的结果。
**运行结果:**如图所示,可输出检测到的条形码数量(无论是否该条形码已学习)、可输出指定的条形码ID,未学习的条形码则为0。
19.2获取画面中指定条形码的相关数据
HuskyLens 2识别条形码后,可获取画面中指定条形码的相关数据。例如,判断某个指定ID的条形码是否在画面中、可获取画面中相同ID的条形码数量,当画面中出现多个相同ID的条形码时,可指定获取其中某个条形码的相关参数,包括名称、内容、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_BARCODE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=65,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=130,font_size=18, color="#0000FF")
while True:
huskylens.getResult(ALGORITHM_BARCODE_RECOGNITION)
if (huskylens.available(ALGORITHM_BARCODE_RECOGNITION)):
if ((huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 0) is not None)):
line1.config(text=(str("ID0条形码总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_BARCODE_RECOGNITION, 0)))))
line2.config(text="第1个ID0条形码")
line3.config(text=(str("的内容:") + str(huskylens.getCachedIndexResultByID(ALGORITHM_BARCODE_RECOGNITION, 0, 1-1).content if huskylens.getCachedIndexResultByID(ALGORITHM_BARCODE_RECOGNITION, 0, 1-1) else -1)))
line4.config(text="第2个ID0条形码")
line5.config(text=(str("的坐标") + str((str(huskylens.getCachedIndexResultByID(ALGORITHM_BARCODE_RECOGNITION, 0, 2-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_BARCODE_RECOGNITION, 0, 2-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(ALGORITHM_BARCODE_RECOGNITION, 0, 2-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_BARCODE_RECOGNITION, 0, 2-1) else -1)))))))
**运行结果:**如图所示,画面中有两个未学习的条形码(ID为0),第一个ID0条形码是下边的,该条形码的内容是“dfrobot”,第二个ID0条形码是上边的,该条形码的坐标是(345,47)。
20.自训练模型代码
除了HUSKYLENS 2出厂内置的这些视觉识别功能,用户还可以自己训练模型并部署到 HUSKYLENS 2中,打造自己独一无二的视觉识别项目。使用此功能请查看二哈识图 2 -自训练模型安装教程
注意:请确保当前HUSKYLENS 2的固件再1.15版本及以上,
更新固件
下面将以自训练的目标检测模型“商品识别”为例,介绍行空板M10如何读取HUSKYLENS 2自训练模型的识别结果。
20.1检测目标输出相关数据
HUSKYLENS 2能识别出现在画面中的目标物(仅能识别用户训练模型时数据集中的所有类别物体),可以通过编程获取画面中检测到的目标物相关数据。
自训练模型部署后,可以识别用户自己标注过的同类别的物体,与其他功能相同,自训练模型应用支持学习检测出的物体,当框出目标物后,按下A键,学习物体,为目标物分配ID。
可以读取的目标数据有:检测到的目标总数、已学习的目标总数,指定目标的数据,包括目标ID、名称、宽度、高度以及条形码中心点的X坐标位置和Y坐标位置。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(129);
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
huskylens.getResult(129);
if (huskylens.available(129)):
line1.config(text=(str("目标总数:") + str((huskylens.getCachedResultNum(129)))))
line2.config(text=(str("已学习的目标总数:") + str((huskylens.getCachedResultMaxID(129)))))
line3.config(text=(str("靠中心的目标ID:") + str((huskylens.getCachedCenterResult(129).ID if huskylens.getCachedCenterResult(129) else -1))))
line4.config(text=(str("第一个目标ID:") + str((huskylens.getCachedResultByIndex(129, 1-1).ID if huskylens.getCachedResultByIndex(129, 1-1) else -1))))
运行结果:如图所示,识别到画面中有3个目标物,已学习的目标物有2个,靠近中心的目标是ID2可乐,第一个被识别的目标是ID0唇膏。 在HUSKYLENS 2学习过的目标物则会按顺序分配ID号,未学习过则ID号为0。
20.2 获取画面中指定目标的相关数据
HuskyLens 2识别目标物后,可获取画面中指定目标的相关数据。例如,判断某个指定ID的目标物是否在画面中、可获取画面中相同ID的目标数量,当画面中出现多个相同ID的目标时,可指定获取其中某个条形码的相关参数,包括ID、名称、X/Y坐标、宽度、高度。
示例程序如下:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(129);
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=105,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=150,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="",x=0,y=175,font_size=18, color="#0000FF")
while True:
huskylens.getResult(129);
if (huskylens.available(129)):
if ((huskylens.getCachedResultByID(129, 3) is not None)):
line1.config(text=(str("ID3目标总数:") + str((huskylens.getCachedResultNumByID(129, 3)))))
line2.config(text=(str("ID3目标名称:") + str((huskylens.getCachedResultByID(129, 3).name if huskylens.getCachedResultByID(129, 3) else -1))))
line3.config(text="第1个ID3目标")
line4.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(129, 3, 1-1).xCenter if huskylens.getCachedIndexResultByID(129, 3, 1-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(129, 3, 1-1).yCenter if huskylens.getCachedIndexResultByID(129, 3, 1-1) else -1)))))))
line5.config(text="第2个ID3目标")
line6.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(129, 3, 2-1).xCenter if huskylens.getCachedIndexResultByID(129, 3, 2-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(129, 3, 2-1).yCenter if huskylens.getCachedIndexResultByID(129, 3, 2-1) else -1)))))))
**运行结果:**如图所示,画面中有2个ID3目标物,名称是“唇膏”,第一个识别到的ID3目标物坐标为(514,338),第二个ID3目标物坐标是(287,333)。